#ifndef SOCK5_SERVER_HPP
#define SOCK5_SERVER_HPP

#include "acceptnewfd.hpp"
#include "ipaddress.hpp"
#include "listenevent.hpp"

namespace oraysock5 {
/**
     * @brief 侦听的服务器地址发生有新连接处理器
    */
class Sock5Server : public ListenEvent {
public:
    /**
         * @brief 构造
         * @param listen_addr 侦听的服务器地址
        */
    explicit Sock5Server(std::shared_ptr<IPAddress> listen_addr);
    ~Sock5Server();

    /**
         * @brief 创建新客户端连接实例
         * @param remoteAddr 客户端连接地址
         * @param iobuf 管理io缓冲
         * @return 新客户端连接实例
        */
    virtual std::weak_ptr<AcceptNewFd> accept_newfd(
        std::shared_ptr<IPAddress> remoteAddr,
        std::shared_ptr<EventBuffer> iobuf) override;
};
}

#endif
